package com.qsl.ssyx.model.search;

import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.DateFormat;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.util.Date;
import java.util.List;

/**
 * @Document:这是一个使用Elasticsearch的Java文档注解，用于定义索引的名称、分片和副本数。
 * - `indexName` 索引库名称。
 * - `shards` 参数指定了创建索引时的分片数，即将索引的数据分成几个部分存储在不同的节点上。这里设置为3，意味着数据将被分为3个分片。
 * - `replicas` 参数指定了每个分片的副本数，即为每个分片创建多少个备份。这里设置为1，表示每个分片将有一个副本。
 * 通过使用这个注解，可以在创建索引的同时指定索引的名称、分片数和副本数。
 */
@Data
@Document(indexName = "skues", shards = 3, replicas = 1)
public class SkuEs {

    // 商品Id= skuId
    @Id
    private Long id;

    // 指定ES
    //  type：参数指定了字段的类型
    //  FieldType.Text: 表示该字段是文本类型。
    //  analyzer 参数指定了分词器的名称，这里设置为ik_max_word，表示使用ik分词器进行最大化分词。
    @Field(type = FieldType.Text, analyzer = "ik_max_word")
    private String keyword;

    @Field(type = FieldType.Integer, index = false)
    private Integer skuType; // 商品类型：0->普通商品 1->秒杀商品

    @Field(type = FieldType.Integer, index = false)
    private Integer isNewPerson; // 是否新人专享：0->否；1->是

    @Field(type = FieldType.Long)
    private Long categoryId; // 分类id

    @Field(type = FieldType.Text)
    private String categoryName; // 分类名称

    //  type 参数指定了字段的类型，这里设置为FieldType.Keyword，表示该字段是关键字类型。
    //  index 参数设置为false，表示该字段不会被索引。
    @Field(type = FieldType.Keyword, index = false)
    private String imgUrl; // 商品图片

    //  es 中能分词的字段，这个字段数据类型必须是 text！keyword 不分词！
    @Field(type = FieldType.Text)
    private String title;

    @Field(type = FieldType.Double)
    private Double price; // 商品金额

    @Field(type = FieldType.Integer, index = false)
    private Integer stock; // 库存

    @Field(type = FieldType.Integer, index = false)
    private Integer perLimit; // 限购个数/每天（0：不限购）

    @Field(type = FieldType.Integer, index = false)
    private Integer sale; // 销量

    @Field(type = FieldType.Long)
    private Long wareId; // 仓库Id

    //  商品的热度！
    @Field(type = FieldType.Long)
    private Long hotScore = 0L;

    @Field(type = FieldType.Object, index = false)
    private List<String> ruleList; // 优惠规则

}
